﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmCliente : OwnZForm
    {
        #region -- Membros e Construtores -------------------------------------------------------------------------------------------------
        public FrmClientes Pai
        {
            get;
            set;
        }

        public bool Edicao
        {
            get;
            set;
        }

        private bool _alterado;

        public tbCliente Cliente
        {
            get;
            set;
        }

        public FrmCliente()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
        }

        private void FrmCliente_Load(object sender, EventArgs e)
        {
            dtCadastro.Value = DateTime.Now;
            string[] Estados = { "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PR", "PB", "PA", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SE", "SP", "TO" };

            foreach (string item in Estados)
            {
                cboEstado.Items.Add(item);
            }

            Carregar();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Eventos ----------------------------------------------------------------------------------------------------------------
        private void txtNome_Validating(object sender, CancelEventArgs e)
        {
            if (txtNome.Text.EhNuloOuVazio())
            {
                erpErro.SetError(txtNome, "Informar o nome do cliente");
                e.Cancel = true;
                return;
            }

            erpErro.SetError(txtNome, "");
        }

        private void txtNome_TextChanged(object sender, EventArgs e)
        {
            _alterado = true;
        }

        private void cmdSalvar_Click(object sender, EventArgs e)
        {
            Salvar();
            Close();
        }

        private void cmdSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void FrmCliente_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!_alterado)
                return;

            var res = Contexto.MainForm.ExibirMensagemSairSemSalvar();

            if (res != DialogResult.Yes)
            {
                e.Cancel = true;
                return;
            }

            Dispose();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Metodos ----------------------------------------------------------------------------------------------------------------
        private void Salvar()
        {
            Cliente.desCliente = txtNome.Text;
            Cliente.Bairro = txtBairro.Text;
            Cliente.Celular = txtCelular.Text;
            Cliente.CEP = txtCEP.Text;
            Cliente.Cidade = txtCidade.Text;
            Cliente.desContato = txtContato.Text;

            if (rbFisica.Checked)
            {
                Cliente.desTipo = "F";
                Cliente.RG = txtIE.Text;
                Cliente.CPF = txtCNPJ.Text;
            }
            else
            {
                Cliente.desTipo = "J";
                Cliente.IE = txtIE.Text;
                Cliente.CNPJ = txtCNPJ.Text;
            }

            Cliente.dtCadastro = dtCadastro.Value;
            Cliente.Endereco = txtEndereco.Text;
            if (cboEstado.SelectedIndex >= 0)
                Cliente.Estado = cboEstado.SelectedItem.ToString();
            Cliente.Fax = txtFax.Text;
            Cliente.flgAtivo = chkAtivo.Checked;
            Cliente.Telefone = txtTelefone.Text;
            Cliente.Numero = txtNumero.Text;
            Cliente.Complemento = txtComplemento.Text;

            if (!Edicao)
                Contexto.Db.tbClientes.AddObject(Cliente);

            Contexto.Db.SaveChanges();

            Edicao = true;

            _alterado = false;

            Pai.AtualizarGrid();
        }

        private void Carregar()
        {
            if (Edicao)
            {
                txtNome.Text = Cliente.desCliente;

                txtBairro.Text = Cliente.Bairro;
                txtCelular.Text = Cliente.Celular;
                txtCEP.Text = Cliente.CEP;
                txtCidade.Text = Cliente.Cidade;
                txtContato.Text = Cliente.desContato;

                if (Cliente.desTipo == "J")
                {
                    rbJuridica.Checked = true;
                    txtIE.Text = Cliente.IE;
                    txtCNPJ.Text = Cliente.CNPJ;
                }
                else
                {
                    rbFisica.Checked = true;
                    txtIE.Text = Cliente.RG;
                    txtCNPJ.Text = Cliente.CPF;
                }

                dtCadastro.Value = (DateTime)Cliente.dtCadastro;
                txtEndereco.Text = Cliente.Endereco;
                cboEstado.SelectedItem = Cliente.Estado;
                txtFax.Text = Cliente.Fax;
                chkAtivo.Checked = (bool)Cliente.flgAtivo;
                txtTelefone.Text = Cliente.Telefone;
                txtNumero.Text = Cliente.Numero;
                txtComplemento.Text = Cliente.Complemento;
            }
            else
                Cliente = new tbCliente();

            _alterado = false;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        private void rbJuridica_CheckedChanged(object sender, EventArgs e)
        {
            lblCNPJ.Text = "CNPJ";
            lblIE.Text = "I.E.";
            lblNome.Text = "Empresa";
            txtCNPJ.Mask = "00,000,000/0000,00";
        }

        private void rbFisica_CheckedChanged(object sender, EventArgs e)
        {
            lblCNPJ.Text = "C.P.F.";
            lblIE.Text = "R.G.";
            lblNome.Text = "Nome";
            txtCNPJ.Mask = "000,000,000-00";
        }
    }
}
